package com.example.demo.service;

import org.springframework.ai.chat.messages.AssistantMessage;
import org.springframework.ai.chat.messages.SystemMessage;
import org.springframework.ai.chat.messages.ToolResponseMessage;
import org.springframework.ai.chat.messages.UserMessage;
import org.springframework.ai.chat.model.ChatModel;
import org.springframework.ai.chat.model.ChatResponse;
import org.springframework.ai.chat.model.StreamingChatModel;
import org.springframework.ai.chat.prompt.Prompt;
import reactor.core.publisher.Flux;

public class AiPromptDemo {


    /**
     * Spring AI 如何处理聊天模型的配置和执行，并结合了启动和运行时选项
     *1、用户输入（Prompt） →
     *2、模型处理（ChatModel / StreamingChatModel） →
     *3、网络请求（调用 AI 模型 API，如 OpenAI） →
     *4、返回响应（ChatResponse）。
     * 过程中会动态合并启动配置（初始设置）和运行时选项（每次请求的临时设置）。
     */
    public void call() {
        // 创建一个提词器对象
        Prompt prompt = new Prompt("this is a new prompt, it will .....");
        // 不同角色的消息对象 系统、用户、助手、工具
//        SystemMessage systemMessage = new SystemMessage();
//        UserMessage userMessage = new UserMessage();
//        AssistantMessage assistantMessage = new AssistantMessage();
//        ToolResponseMessage toolResponseMessage = new ToolResponseMessage();

        /**
         * ChatModel / StreamingChatModel（模型处理）
         * 作用：处理输入并调用 AI 模型，支持流式（Streaming）和非流式响应。
         * 关键操作：
         * Convert Input：将用户输入转换成模型能理解的格式（如 JSON 请求）。
         * Merge Options：合并启动配置（初始设置）和运行时选项（临时覆盖）。
         * Convert Output：将模型返回的原始数据（如 JSON）转成 ChatResponse。
         * */
        new ChatModel() {
            @Override
            public ChatResponse call(Prompt prompt) {
                return null;
            }
        };

        new StreamingChatModel() {
            @Override
            public Flux<ChatResponse> stream(Prompt prompt) {
                return null;
            }
        };
    }
}
